home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Languguage OS 2
/
Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO
/
language
/
embedded
/
mcu
/
float09.arc
/
DISPAT.SA
< prev
next >
Wrap
Text File
|
1987-03-04
|
5KB
|
227 lines
NAM DISPCH
TTL DISPATCH OPERATION THROUGH THE FUNCTION TABLES
*
* LINKING LOADER DEFINITONS
*
XDEF DISPAT
*
XREF FMUL
XREF FADD,CHKZER,CHKINF
XREF FDIV,DIVZER
XREF FREM
XREF FSQRT,SQINCK
XREF GETINT
XREF MAGCMP,CMPZER,CMPINF,NANCMP,INFAR1
XREF INFAR2,ARG1UN,ARG2UN,BOTHUN
XREF FFIX,BIGINT,FIXNAN,FIXZER
XREF BDCNVT,OUTNDC
XREF FMOVE,MOVUN
XREF FABS,FNEG
XREF RTAR1,RTAR2,RTNAN,RTINF,RTDNAN
XREF RTZERO,NAN1,NAN4,NAN9,NAN10
XREF ROMSTR
XREF DECBIN,FLOAT
*
* REVISION HISTORY:
*
* DATE PROGRAMMER REASON
*
* 01.JUL.80 G. STEVENS ORIGINAL
* 28.JUL.80 G. STEVENS TRANSPOSE TABLES
* 18.AUG.80 G. STEVENS FIX COMPARE TABLES FOR UN ZERO
*
PAGE
***************************************************
*
* DISPAT --
* THIS SUBROUTINE USES THE FUNCTION CODE TO
* SELECTION A FUNCTION TABLE. IT THEN USES THE TYPES
* OF THE ARGUMENTS TO JUMP THROUGH THE ADDRESSES IN
* THE FUNCTION TABLE TO THE PROPER SUBROUTINE TO
* PERFORM THE FUNCTION.
*
* NO REGISTERS ARE PRESERVED; ALL RELEVANT STATE
* IS STORED IN THE STACK FRAME.
*
************************
*
* ADRTBL --
* THIS MACRO CREATES A TABLE OF ADDRESSES RELATIVE TO
* THE START OF THE ROM. IT CAN BE CALLED WITH FROM ONE TO
* FIVE ARGUMENTS, WHICH ARE THE ENTRY POINTS TO TABLES
* OR ROUTINES IN THE ROM.
*
ADRTBL MACR
IFEQ NARG-5
FDB \0-ROMSTR,\1-ROMSTR,\2-ROMSTR,\3-ROMSTR,\4-ROMSTR
EXIT
ENDC
IFEQ NARG-4
FDB \0-ROMSTR,\1-ROMSTR,\2-ROMSTR,\3-ROMSTR
EXIT
ENDC
IFEQ NARG-3
FDB \0-ROMSTR,\1-ROMSTR,\2-ROMSTR
EXIT
ENDC
IFEQ NARG-2
FDB \0-ROMSTR,\1-ROMSTR
EXIT
ENDC
IFEQ NARG-1
FDB \0-ROMSTR
EXIT
ENDC
ENDM
*
* THE FOLLOWING TABLE IS INDEXED BY THE (FUNCTION NUMBER-1)
* AND CONTAINS THE ADDRESSES OF THE FUNCTION TABLES FOR
* EACH FLOATING-POINT OPERATION.
*
FUNTBL EQU *
ADRTBL ADDTBL,SUBTBL,MULTBL,DIVTBL,REMTBL
ADRTBL CMPTBL,CMPTBL,CMPTBL,CMPTBL,SQRTBL
ADRTBL INTTBL,FIXTBL,FIXTBL,MOVTBL,BNDTBL
ADRTBL ABSTBL,NEGTBL
ADRTBL DECBIN,FLOAT,FLOAT
PAGE
*
*
* ENTER HERE ON DISPAT CALL
*
* FIRST GET THE ADDRESS OF THE TABLE FOR A PARTICULAR
* FLOATING-POINT COMMAND.
*
DISPAT EQU *
LDB FUNCT,U GET FUNCTION CODE
ANDB #$3F MASK OUT OPCODE NBR
IF B,EQ,#FCSUB
LDA TYPE2,U CHECK FOR A NAN
IF A,NE,#TYNAN IF ARG2 IS NOT A NAN
LDA ARG2,U
EORA #$80 FOR SUBTRACT, CHANGE SIGN
STA ARG2,U AND ADD
ENDIF ARG2 NOT A NAN
ENDIF
LEAY FUNTBL,PCR
CMPB #FCNOJP UNLESS OPERATOR HAS NO
BGE DSJMP TABLE
LDD B,Y OFFSET OF FUNCTION LOOKUP
LEAY ROMSTR,PCR
LEAY D,Y ADDR IS NOW IN Y
*
* NOW CREATE OFFSET IN OPERATION
* TABLE USING TYPES OF OPERANDS. IT IS
* ASSUMED THAT A NON-EXISTENT ARGUMENT
* HAS A TYPE OF ZERO.
*
LDA TYPE1,U
LDB #5
MUL
ADDB TYPE2,U OFFSET = TYP1*5 + TYP2
*
* NOW GET PROCESSING ROUTINE OUT
* OF OPERATION TABLE AND JSR TO IT.
*
DSJMP LDD B,Y
LEAY ROMSTR,PCR
JSR D,Y JUMP TO PROCESSING SUBROUTINE
*
* HERE IS COMMON RETURN POINT FOR ALL
* PROCESSING ROUTINES.
*
RTS
*
PAGE
*
*******************************************
*
* OPERATION DEFINITION TABLES
*
* THE FOLLOWING TABLES CONTAIN ADDRESS
* OF THE SUBROUTINES THAT OPERATE ON
* ARGUMENTS OF VARIOUS TYPES. THE TABLES
* ARE ORGANIZED BY COLUMNS, I.E. EACH
* 'ADRTBL' LINE IN A TABLE BELOW CORRESPONDS
* TO A ROW IN THE TABLE IN THE MOTOROLA SPEC.
*
MULTBL EQU *
ADRTBL FMUL,RTZERO,RTINF,RTAR2,FMUL
ADRTBL RTZERO,RTZERO,NAN9,RTAR2,RTZERO
ADRTBL RTINF,NAN9,RTINF,RTAR2,RTINF
ADRTBL RTAR1,RTAR1,RTAR1,RTDNAN,RTAR1
ADRTBL FMUL,RTZERO,RTINF,RTAR2,FMUL
*
* TABLE FOR ADD/SUBTRACT
*
ADDTBL EQU *
SUBTBL EQU *
ADRTBL FADD,FADD,RTAR2,RTAR2,FADD
ADRTBL FADD,CHKZER,RTAR2,RTAR2,RTAR2
ADRTBL RTAR1,RTAR1,CHKINF,RTAR2,RTAR1
ADRTBL RTAR1,RTAR1,RTAR1,RTDNAN,RTAR1
ADRTBL FADD,RTAR1,RTAR2,RTAR2,FADD
*
* TABLE FOR DIVISION
*
DIVTBL EQU *
ADRTBL FDIV,DIVZER,RTZERO,RTAR2,NAN4
ADRTBL RTZERO,NAN4,RTZERO,RTAR2,RTZERO
ADRTBL RTINF,RTINF,NAN4,RTAR2,RTINF
ADRTBL RTAR1,RTAR1,RTAR1,RTDNAN,RTAR1
ADRTBL FDIV,DIVZER,RTZERO,RTAR2,NAN4
*
* TABLE FOR REMAINDER
*
REMTBL EQU *
ADRTBL FREM,NAN10,RTAR1,RTAR2,NAN10
ADRTBL RTAR1,NAN10,RTAR1,RTAR2,NAN10
ADRTBL NAN10,NAN10,NAN10,RTAR2,NAN10
ADRTBL RTAR1,RTAR1,RTAR1,RTDNAN,RTAR1
ADRTBL FREM,NAN10,RTAR1,RTAR2,NAN10
*
* TABLE FOR SQUARE ROOT
*
SQRTBL EQU *
ADRTBL FSQRT,RTAR2,SQINCK,RTAR2,NAN1
*
* TABLE INTEGER PART
*
INTTBL EQU *
ADRTBL GETINT,RTAR2,RTAR2,RTAR2,GETINT
*
* TABLE FOR ALL FOUR COMPARE OPERATIONS
*
CMPTBL EQU *
ADRTBL MAGCMP,MAGCMP,INFAR2,NANCMP,ARG2UN
ADRTBL MAGCMP,CMPZER,INFAR2,NANCMP,ARG2UN
ADRTBL INFAR1,INFAR1,CMPINF,NANCMP,INFAR1
ADRTBL NANCMP,NANCMP,NANCMP,NANCMP,NANCMP
ADRTBL ARG1UN,ARG1UN,INFAR2,NANCMP,BOTHUN
*
* TABLE FOR FP-TO-BINARY INTEGER
*
FIXTBL EQU *
ADRTBL FFIX,FIXZER,BIGINT,FIXNAN,FFIX
*
* TABLE FOR FP TO DECIMAL STRING CONVERSION
*
BNDTBL EQU *
ADRTBL BDCNVT,OUTNDC,OUTNDC,OUTNDC,BDCNVT
*
* TABLE FOR MOVE OPERATION
*
MOVTBL EQU *
ADRTBL FMOVE,RTAR2,RTAR2,RTAR2,MOVUN
*
* TABLE FOR ABSOLUTE VALUE FUNCTION
*
ABSTBL EQU *
ADRTBL FABS,FABS,FABS,RTAR2,FABS
*
* TABLE FOR NEGATE FUNTION FUNCTION
*
NEGTBL EQU *
ADRTBL FNEG,FNEG,FNEG,RTAR2,FNEG
*